package MovieData;

import java.io.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/*
* 此类存储 增删改查 及退出五种方法
* 用HashMap<String,Movie>存储数据*/
public class MovieList {
    Scanner sc=new Scanner(System.in);
    private HashMap<String,Movie> movieList=new HashMap<>();
    ObjectInputStream ois;
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");

    public MovieList() {
        /*
        * 采用反序列化将目标文件夹的电影信息存储到HashMap里面以便进行增删改查操作
        * */
        File file=new File("C:\\Users\\a3502\\Desktop\\电影管理系统\\src\\Movies\\");
        if(!file.exists()){
            file.mkdirs();
        }
        String []name=file.list();
        /*
        * 遍历文件夹下的文件反序列化
        * */
        for(String s:name){
            try {
                ois=new ObjectInputStream(new FileInputStream("C:\\Users\\a3502\\Desktop\\电影管理系统\\src\\Movies\\"+ s));
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                movieList.put(s,(Movie) ois.readObject());
            } catch (IOException | ClassNotFoundException e) {
                e.printStackTrace();
            }finally {
                try {
                    ois.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public HashMap<String, Movie> getMovieList() {
        return movieList;
    }

    public void setMovieList(HashMap<String, Movie> movieList) {
        this.movieList = movieList;
    }
    public void movieAdd(){
        /*
        * 将要加入的电影信息放进HashMap中，在结束时再一起反序列化*/
        String name;
        int duration;
        int price;
        String director;
        String LeadingRole;
        Date ReleaseData = null;
        System.out.println("-------------------请输入录入的电影的基本信息-------------------");
        System.out.print("1.请输入录入的电影的名字:");
        name=sc.next();
        System.out.print("2.请输入录入的电影的播放时长:");
        duration=sc.nextInt();
        System.out.print("3.请输入录入的电影的价格:");
        price=sc.nextInt();
        System.out.print("4.请输入录入的电影的导演名字:");
        director=sc.next();
        System.out.print("5.请输入录入的电影的主演名字:");
        LeadingRole=sc.next();
        System.out.print("6.请输入录入的电影的上映时间:");
        try {
            ReleaseData=sdf.parse(sc.next());
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Movie movie=new Movie(name,duration,price,director,LeadingRole,ReleaseData);
        this.getMovieList().put(name,movie);
    }
    public void movieRemove(){
        /*
         * 将要删除的电影信息从HashMap中删除，在结束时再一起序列化*/
        if(movieList.size()==0){
            System.out.println("当前电影总数量为空，无法删除");
            return ;
        }
        System.out.println("请输入要删除的电影的名字");
        String name=sc.next();
        movieList.remove(name);
        if(!movieList.containsKey(name)){
            System.out.println("电影不存在,删除失败,请重试");
        }else{
            System.out.println("删除成功");
        }
    }
    public void movieChange(){
        /*
        * 一样的改变HashMap里的值最终一起序列化*/
        if(movieList.size()==0){
            System.out.println("当前电影总数量为空，无法修改");
            return ;
        }
        System.out.println("请选择要修改的电影的名字");
        String name=sc.next();
        while(!movieList.containsKey(name)){
            System.out.println("该电影名不存在请重新输入");
            name=sc.next();
        }
        boolean flag=true;
        while(flag){
            System.out.println("---------------------请选择要修改的信息,不可更改名字---------------------");
            System.out.println("1.电影时长");
            System.out.println("2.电影票价格");
            System.out.println("3.电影导演姓名");
            System.out.println("4.电影主演姓名");
            System.out.println("5.电影上映时间");
            System.out.println("6.完成修改");
            int input=sc.nextInt();
            while(input>6||input<1){
                System.out.println("输入错误，请重新选择");
                input= sc.nextInt();
            }
            /*
            * 选择某一电影需要修改的信息进行修改
            * */
            switch (input) {
                case 1 -> {
                    System.out.print("请输入修改后的电影时长:");
                    movieList.get(name).setDuration(sc.nextInt());
                    System.out.println("电影时长修改完成");
                }
                case 2 -> {
                    System.out.print("请输入修改后的电影票价格:");
                    movieList.get(name).setPrice(sc.nextInt());
                    System.out.println("电影票价格修改完成");
                }
                case 3 -> {
                    System.out.print("请输入修改后的电影导演姓名:");
                    movieList.get(name).setDirector(sc.next());
                    System.out.println("电影导演姓名修改完成");
                }
                case 4 -> {
                    System.out.print("请输入修改后的电影主演姓名:");
                    movieList.get(name).setLeadingRole(sc.next());
                    System.out.println("电影主演姓名修改完成");
                }
                case 5 -> {
                    System.out.print("请输入修改后的电影上映时间:");
                    try {
                        movieList.get(name).setReleaseData(sdf.parse(sc.next()));
                    } catch (ParseException e) {
                        e.printStackTrace();
                    }
                    System.out.println("电影上映时间修改完成");
                }
                case 6 -> {
                    System.out.println("修改完成，返回");
                    flag = false;
                }
            }
        }
    }
    public void movieSearch(){
        if(movieList.size()==0){
            System.out.println("此系统还未添加过电影");
        }else{
            Set<String> key=movieList.keySet();
            for(String s:key){
                System.out.println(movieList.get(s));
            }
        }
        File file=new File("C:\\Users\\a3502\\Desktop\\电影管理系统\\src\\Movies");
        if(!file.exists()){
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    public void quit(){
        File file=new File("C:\\Users\\a3502\\Desktop\\电影管理系统\\src\\Movies");
        File file1=new File("C:\\Users\\a3502\\Desktop\\电影管理系统\\src\\Movies");
        String []name=file.list();
        for(String s:name){
            System.out.println("测试");
            System.out.println(s);
            System.out.println("C:\\Users\\a3502\\Desktop\\电影管理系统\\src\\Movies\\"+s);
            if(!movieList.containsKey(s)){
                file1=new File("C:\\Users\\a3502\\Desktop\\电影管理系统\\src\\Movies\\"+s);
                System.out.println(file1.delete());
            }
        }
        for(String s:movieList.keySet()){
            ObjectOutputStream oos=null;
            try {
                oos=new ObjectOutputStream(new PrintStream("C:\\Users\\a3502\\Desktop\\电影管理系统\\src\\Movies\\"+s));
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                oos.writeObject(movieList.get(s));
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                try {
                    oos.flush();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    oos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
